iT邦幫忙

2024 iThome 鐵人賽

DAY 13
0

今天想要來跟大家介紹這次的套件主要功能,跟我預計之後會如何拆解功能變成不同 Function 的構想。最一開始會再更詳細介紹 Statcast Search 這個在大聯盟官方的數據網站 Baseball Savant 上的功能。去年參加鐵人賽的時候我就要寫一篇文章簡單介紹過了,大家有興趣可以去看看,今天會直接進入更詳細的介紹。

Statcast Search

為什麼要再介紹一次 Savant 的搜尋頁呢?的確 pybaseball 已經提供了一些可以操作 Statcast Search 的 function 給大家使用,不過他只提供的篩選只有 date 而已。而其實搜尋頁提供很多可以使用的篩選,只有日期的篩選的話我覺得略顯可惜。
https://ithelp.ithome.com.tw/upload/images/20240927/20163024Cl7q8Zbnhg.png

可以從上圖看到除了日期,還有將近 30-40 左右的篩選可以使用。

另外一個是我沒有在去年的文提到的新功能,因為是今年 3 月左右,大聯名例行賽開季前釋出的 Minor League Statcast Search ,也就是小聯盟的 Statcast 搜尋。雖然目前不是所有小聯盟的比賽都在這邊搜尋的到(目前含有:從 2023 年開始的所有 3A 資料,2022 年開始的 PCL 跟 夏洛特主場賽事,以及 2021 年開始的 1A 佛羅里達州聯盟),但現在已經可以搜尋到許多在小聯盟打拼的台灣好手,像是目前效力於紅雀 1A 的 林振偉 選手的資料,因為是在佛羅里達聯盟,所以收得特別多。

https://ithelp.ithome.com.tw/upload/images/20240927/20163024tk19Muhb02.png

所以希望在這次鐵人賽能完成兩大功能:

  1. 更彈性的 Statcast Search
  2. Minor League Statcast Search

基本上兩個性質滿重疊的,使用的 參數(Parameters) 也大同小異,不過可以使用篩選值,像是球場或是球隊可能就會不太一樣。

Search Params

在開始寫程式前,想介紹一下他們是如何使用 URL 來使用篩選器,當我們在搜尋頁搜尋一個目標後,大家可以注意一下網址的變化,像是剛才林振偉的搜尋結果,會得到

https://baseballsavant.mlb.com/statcast-search-minors?hfPT=&hfAB=&hfGT=R%7C&hfPR=&hfZ=&hfStadium=&hfBBL=&hfNewZones=&hfPull=&hfC=&hfSea=2024%7C&hfSit=&player_type=pitcher&hfOuts=&hfOpponent=&pitcher_throws=&batter_stands=&hfSA=&game_date_gt=&game_date_lt=&hfMo=&hfTeam=&home_road=&hfRO=&position=&hfInn=&hfBBT=&hfFlag=is%5C.%5C.tracked%7C&hfLevel=&pitchers_lookup%5B%5D=813820&metric_1=&hfTeamAffiliate=&hfOpponentAffiliate=&group_by=name&min_pitches=0&min_results=0&min_pas=0&sort_col=pitches&player_event_sort=api_p_release_speed&sort_order=desc&chk_is..tracked=on#results

很大一長串,他會以 ? 為起點,然後再用每個 & 為斷點,就能拿到每一個 Filterkeyvalue,最後回拿到一個 parametersdictionary,之後就可以使用裡面 參數,像是 player_type=pitcher 就會變成

{
  "player_type": "pitcher"
}

如果是空值,等號後面就不會有東西,之後就可以操作 URL 來進行篩選。不過也可以看到,這樣參數會很多,所以我會想拆成不同功能的 functions,但還是會留一個最有彈性的 function 供大家選擇使用。
預計會是這樣:

  • 可以使用所有 params 的 statcast_search
  • 搜尋單一投手、打者、捕手的 statcast_pitcherstatcast_batterstatcast_catcher
  • 搜尋單一球隊各項的 statcast_team_pitcherstatcast_team_batterstatcast_team_catcher
  • 小聯盟的話我應該會再建另外一個 minor_statcast_search 做分別

本日小結

今天介紹了一下之後開發的計畫,明天想來介紹這些 parameters,跟他們可能會有的值,我們也許會需要特別設計 ENUM 去存。
一樣感謝大家耐心地看完這篇文章,有任何問題與建議歡迎留言告訴我,明天見,掰掰。


上一篇
Day 12 - Github Actions 上傳 PyPI 版號問題
下一篇
Day 14 - Function 說明撰寫(Typing & Docstrings)
系列文
上次介紹的棒球套件很少更新了,那就只好自己寫一個!?31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言